package 华为;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner;

/*
* 3、寻找完全相同的子树
* 在一颗二叉树中找出完全相同的两颗子树（子树层数必须大于或者等于2）
* 如果存在多对子树完全相同，请返回层数最大的子树。如果不存在即输出“-1”
* 输入：
* 一个数组表示二叉树，数组元素按照层序排布，不存在的节点用bull表示
*
* 对左右子树的遍历，其实可以在数组中找到对应的位置
* */
public class Main {

    static HashMap<String,Integer> memo=new HashMap<>();
    static LinkedList<String> res=new LinkedList<>();
    //表示找到以root为下标的这颗子树的序列化结果
    public static String traverse(String[] nums,int root){
        if (root>=nums.length){
            return "";
        }
        String subTree="";
        if (nums[root].equals("null")){
            subTree="#";
        }else {
            subTree=nums[root];
        }
        String left = traverse(nums, root * 2+1);
        String right = traverse(nums, root * 2 + 2);
        subTree=subTree+","+left+","+right;
        int freq = memo.getOrDefault(subTree, 0);
        if (freq==1){
            res.add(subTree);
        }
        memo.put(subTree,freq+1);
        return subTree;
    }
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        String line = cin.nextLine();
        int n=line.length();
        String[] node = line.substring(1, n - 1).split(",");
        traverse(node,0);
        if (res.size()==0){
            System.out.println(-1);
        }else {
            int maxtree=0;
            String restree="";
            for (String tree:res) {
                if (tree.length()>1&&tree.length()>maxtree){
                    maxtree=tree.length();
                    restree=tree;
                }
            }
            if (restree.length()==0){
                System.out.println(-1);
            }else {
                //需要将子树中的#替换为null，需要找出这个子树成为数组
                System.out.println("["+restree+"]");
            }
        }
    }
}
